¿Cuál es el método más rápido para convertir un java.nio.ByteBuffer a en un CharBuffer bo char [] b (recién creado). Al hacer esto, es importante que a [i] == b [i]. Esto significa que no a [i] y a [i + 1] juntos componen un valor b [j], lo que haría getChar (i), pero los valores deberían "distribuirse". byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // cada byte (que está firmado) char b [] = {1,2,3, 125,126,127, 128, 129, 130} // cada uno es un char (que no están firmados) Tenga en cuenta que el byte: -128 tiene los mismos bits (8 inferiores) que char: 128. Por lo tanto, supongo que la "mejor" interpretación sería la que señalé anteriormente, porque los bits son los mismos. Después de eso, también necesito la traducción viceversa: la forma más eficiente de obtener un char [] o java.nio.CharBuffer de nuevo en un java.nio.ByteBuffer.
2021-01-06 08:20:13
Entonces, lo que desea es convertir usando la codificación ISO-8859-1. No pretendo nada sobre la eficiencia, pero al menos es bastante breve para escribir: Resultado de CharBuffer = Charset.forName ("ISO-8859-1"). Decode (byteBuffer); La otra dirección sería: Resultado de ByteBuffer = Charset.forName ("ISO-8859-1"). Encode (charBuffer); Mida esto con otras soluciones. (Para ser justos, la parte Charset.forName no debe incluirse, y también debe hacerse solo una vez, no para cada búfer nuevamente). Desde Java 7 en adelante, también existe la clase StandardCharsets con instancias de Charset previamente instanciadas, por lo que puede usar Resultado de CharBuffer = StandardCharsets.ISO_8859_1.decode (byteBuffer); y Resultado de ByteBuffer = StandardCharsets.ISO_8859_1.encode (charBuffer); en lugar. (Estas líneas hacen lo mismo que las anteriores, solo que la búsqueda es más fácil y no hay riesgo de escribir mal los nombres, y no es necesario detectar las excepciones imposibles). | Estoy de acuerdo con @ Ishtar, sugiero que evite la conversión a una nueva estructura y solo convierta cuando lo necesite. Sin embargo, si tiene un ByteBuffer de montón, puede hacerlo. ByteBuffer bb = ... byte [] matriz = bb.array (); char [] chars = new char [bb.remaining ()]; para (int i = 0; i